#ifndef ALLINALL_SHADER
#define ALLINALL_SHADER

#include<glad/glad.h>
#include<vector>
#include<cstring>
using namespace std;
//一个shader目前认知来看只能同时联系上两个glsl
/*而shader与glsl又是相互独立的
 *所以建立一个专门的类管理所有glsl：即glsl类
 *又建立一个shader类只代表一个特定的shader
 *still waitting
 *一个转门管理多个shader的类
 *可以根据shader的名字来检索对应的shader
 *
 */
struct source_with_name{
	char name[256];
	unsigned int ID;
	source_with_name(const char*name,GLuint ID){
		strcpy(this->name,name);
		this->ID=ID;
	}
};
struct glsl{
	vector<source_with_name>vtx;
	vector<source_with_name>frg;
	void addglsl(const char*glslfile,const unsigned short glsltype);
	void listglsl(const char type);
	~glsl();
};
extern glsl glsls;

class shader{
	unsigned int SID;
	glsl*source;
public:
	char glsltake[2][256];
	shader(glsl&from,int v,int f);
	~shader();
	void chgcontext(size_t v,size_t f);
	void use();
};

#endif